const strLit = 'Hello';
const strObj = new String('Hello');

console.log(strLit, typeof strLit); // 输出：Hello string
console.log(strObj, typeof strObj); 
console.log(strLit.toUpperCase());

console.log(strObj.valueOf(), typeof strObj.valueOf());
console.log(strLit.constructor);
console.log(Object.getPrototypeOf(strObj)); 

console.log(strLit instanceof String); // 输出：false
console.log(strObj instanceof String);

const numLit = 42; // 数字字⾯量
const numObj = new Number(42); // 数字对象
console.log(numLit, typeof numLit); // 输出：42 number
console.log(numObj, typeof numObj);

const boolLit = true; // 布尔字⾯量
const boolObj = new Boolean(true); // 布尔对象
console.log(boolLit, typeof boolLit); // 输出：true boolean
console.log(boolObj, typeof boolObj);

const arrLit = [1, 2, 3]; // 数组字⾯量
const arrObj = new Array(1, 2, 3); // 数组对象
console.log(arrLit, typeof arrLit); // 输出：[1, 2, 3] object
console.log(arrObj, typeof arrObj);

function funcLit(x) {
    return x * x;
    }
    console.log(funcLit(5)); // 输出：25
    console.log(typeof funcLit); 

    const funcObj = new Function('x', 'return x * x;');
    console.log(funcObj(5)); // 输出：25
    console.log(typeof funcObj);
    
    const obj1 = {};
    console.log(obj1, typeof obj1); 

const obj2 = new Object();
console.log(obj2, typeof obj2);